package com.zenith.storage.po.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.zenith.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 文件主表实体类
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sto_file")
@Schema(name = "网盘文件实体类", description = "网盘文件实体类")
public class StorageFile extends BaseEntity {

    /**
     * 关联存储提供商
     */
    @Schema(description = "关联存储提供商")
    private Long providerId;

    /**
     * 对象存储最终路径/Key
     */
    @Schema(description = "对象存储最终路径/Key")
    private String fileKey;

    /**
     * 原始文件名
     */
    @Schema(description = "原始文件名")
    private String originalName;

    /**
     * 文件大小(字节)
     */
    @Schema(description = "文件大小（字节）")
    private Long fileSize;

    /**
     * MIME类型
     */
    @Schema(description = "MIME类型")
    private String mimeType;

    /**
     * 文件扩展名
     */
    @Schema(description = "文件扩展名")
    private String extension;

    /**
     * 文件MD5
     */
    @Schema(description = "文件MD5")
    private String md5;

    /**
     * 文件SHA256
     */
    @Schema(description = "文件SHA256")
    private String sha256;

    /**
     * OSS返回的ETag
     */
    @Schema(description = "OSS返回的ETag")
    private String etag;

    /**
     * 加密类型 0-不加密 1-SSE-OSS 2-CMK
     */
    @Schema(description = "加密类型 0-不加密 1-SSE-OSS 2-CMK")
    private Integer encryptionType;

    /**
     * 存储类型 0-标准 1-IA 2-归档 3-冷存
     */
    @Schema(description = "存储类型 0-标准 1-IA 2-归档 3-冷存")
    private Integer storageClass;

    /**
     * 状态(1-正常 0-软删除(回收站))
     */
    @Schema(description = "状态（1-正常 0-软删除（回收站））")
    private Integer status;

    /**
     * 上传状态 0-初始化 1-上传中 2-完成 3-失败
     */
    @Schema(description = "上传状态0-初始化 1-上传中 2-完成 3-失败")
    private Integer uploadStatus;

    /**
     * 上传IP
     */
    @Schema(description = "上传IP")
    private String uploadIp;

    /**
     * 上传UserAgent
     */
    @Schema(description = "上传UserAgent")
    private String uploadUserAgent;

    /**
     * 扩展信息（JSON）
     */
    @Schema(description = "扩展信息（JSON）")
    private String extJson;
}